class MyClass {
    // 参数属性
    constructor(private f: number = 100) {
        console.log(this.f)
    }
}

let m = new MyClass()
// console.log(m.f) // 私有字段访问不到

class MyClass2 {
    // 私有构造函数，只用于工厂方法，类自己不能被创建
    private constructor(private f: number = 100) {
        console.log(this.f)
    }

    static createMyClass2(f: number = 100) {
        return new MyClass2(f)
    }
}

let m2 = MyClass2.createMyClass2()

abstract class MyClass3 {
    constructor(private f: number = 100) {
        console.log(this.f)
    }
}

// 抽象类不能被实例化
// let m3 = new MyClass3() // 报错
// 必须实现抽象类的所有抽象方法
class MyClass4 extends MyClass3 {
    constructor(f: number = 100) {
        super(f)
    }
}
let m4 = new MyClass4()